home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 051-075 / scopedisk62 / jumble / jumble.c < prev    next >
C/C++ Source or Header  |  1995-03-19  |  1KB  |  104 lines

  1. /*
  2.  * jumble.c - create/solve anagrams
  3.  *
  4.  * Manx Compile: cc +x5 jumble
  5.  *               ln jumble -lc
  6.  */
  7.  
  8. #define TRUE    1
  9. #define FALSE    0
  10.  
  11. #define tolower(c) ((c) | 0x20)
  12.  
  13. char *a, b[79];
  14. short filter = FALSE;
  15.  
  16. valid()
  17. {
  18.     static char vowel [] = { "aeiouy" };
  19.     register short v = 0, c = 0;
  20.     register char *s = a;
  21.  
  22.     while (*s) {
  23.         if (strchr(vowel, *s++))
  24.         {
  25.             v++;
  26.             c = 0;
  27.         }
  28.         else
  29.         {
  30.             v = 0;
  31.             c++;
  32.         }
  33.         if (v == 3 || c == 4)
  34.             return FALSE;
  35.     }
  36.     return TRUE;
  37. }
  38.  
  39. void output()
  40. {
  41.     if (filter && !valid())
  42.         return;
  43.     else
  44.     {
  45.         if ((strlen(b) + strlen(a)) < 77)
  46.             strcat(b, a);
  47.         else
  48.         {
  49.             puts(b);
  50.             strcpy(b, a);
  51.         }
  52.         strcat(b, " ");
  53.     }
  54. }
  55.  
  56. void permute(k)
  57. register short k;
  58. {
  59.     register short i;
  60.     register char t;
  61.  
  62.     if (k == 0)
  63.         output();
  64.     else
  65.         permute(k - 1);
  66.  
  67.     for (i = 0; i < k; i++)
  68.     {
  69.         t = a[i], a[i] = a[k], a[k] = t;
  70.         permute(k - 1);
  71.         t = a[i], a[i] = a[k], a[k] = t;
  72.     }
  73. }
  74.  
  75. void main(argc, argv)
  76. int argc;
  77. char *argv[];
  78. {
  79.     register char c;
  80.  
  81.     while (--argc && (*++argv)[0] == '-')
  82.         while (c = *++argv[0])
  83.             switch (tolower(c))
  84.             {
  85.                 case 'f':
  86.                     filter = TRUE;
  87.                     break;
  88.  
  89.                 default:
  90.                     puts("\nError: unknown flag\n");
  91.                     break;
  92.             }
  93.     if (argc != 1 || **argv == '?')
  94.         puts("\nUsage: JUMBLE [-f] text\n");
  95.     else
  96.     {
  97.         a = *argv;
  98.         permute(strlen(a) - 1);
  99.         puts(b);
  100.     }
  101. }
  102.  
  103. _wb_parse() {}
  104.